package com.oliver.oliveraiagent.tools;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.beans.factory.annotation.Value;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 联网搜索工具
 */
@Slf4j
public class WebSearchTool {

    // todo searchapi的官网文档地址：https://www.searchapi.io/

    // SearchAPI 的搜索接口地址
    private static final String SEARCH_API_URL = "https://www.searchapi.io/api/v1/search";

    @Value("${search.api.key}")
    private final String apiKey;

    public WebSearchTool(String apiKey) {
        this.apiKey = apiKey;
    }

    @Tool(description = "Search for information from Baidu Search Engine")
    public String searchWeb(
            @ToolParam(description = "Search query keyword") String query) {
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("q", query);
        paramMap.put("api_key", apiKey);
        paramMap.put("engine", "baidu");
        paramMap.put("ct", "0");
        try {
            String response = HttpUtil.get(SEARCH_API_URL, paramMap);
//            log.info("联网搜索返回的结果：" + response);
            // 取出返回结果的前 5 条
            JSONObject jsonObject = JSONUtil.parseObj(response);

            // 提取 organic_results 部分（自然搜索的信息）
            JSONArray organicResults = jsonObject.getJSONArray("organic_results");
//            log.info("联网搜索返回的自然搜索信息：" + organicResults);

            // 提取 related_searches 部分（相关联的信息）
            JSONArray relatedSearches = jsonObject.getJSONArray("related_searches");
//            log.info("联网搜索返回的相关联信息：" + relatedSearches);

            //  提取 organic_results 部分（其他人也搜索的信息）
            JSONArray peopleAlsoSearchFor = jsonObject.getJSONArray("people_also_search_for");
//            log.info("联网搜索返回的其他用户也搜索的信息：" + peopleAlsoSearchFor);

            //  提取 top_searches 部分（热点信息）
            JSONArray topSearches = jsonObject.getJSONArray("top_searches");
//            log.info("联网搜索返回的热点信息：" + topSearches);

            String result = "";
            List<Object> objects = new ArrayList<>();
            if (CollectionUtil.isNotEmpty(organicResults)){
                objects = organicResults.subList(0, 5);
                // 拼接搜索结果为字符串
                result = objects.stream().map(obj -> {
                    JSONObject tmpJSONObject = (JSONObject) obj;
                    return tmpJSONObject.toString();
                }).collect(Collectors.joining(","));
            }else {
                result = "联网搜索返回的结果为空";
            }

            return result;
        } catch (Exception e) {
            return "Error searching Baidu: " + e.getMessage();
        }
    }

}
